<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Data Manipulation Language</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Data_Manipulation_Language"> <link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Data_Manipulation_Language rootpage-Data_Manipulation_Language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Data Manipulation Language</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Die <b>Data Manipulation Language</b> (<b>DML</b>; <span style="font-style:normal;font-weight:normal"><a href="Deutsche_Sprache" title="Deutsche Sprache">deutsch</a></span> <span lang="de-Latn">Datenbearbeitungssprache</span>) ist der Teil einer <a href="Datenbanksprache" title="Datenbanksprache">Datenbanksprache</a>, die verwendet wird, um Daten zu schreiben, zu lesen, zu ändern und zu löschen. DML ist die Datenver- oder Datenbearbeitungssprache einer Datenbank und schließt die Formulierung von <a href="Abfragesprache" title="Abfragesprache">Abfragen</a> ein.
</p><p>Für frühere und heutige Systeme sind zum Teil sehr verschiedene Ausprägungen der DML entworfen worden. Beispiele:
</p>
<ul><li>In den historischen <a href="Information_Management_System" title="Information Management System">IMS</a>-Datenbanken ist die eigenständige DML namens DL/I eine Sprache für andere Computer-Programme. Beispiel:</li></ul>
<div class="mw-highlight mw-highlight-lang-mysql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">CALL</span><span class="w"> </span><span class="n">PLITDLI</span><span class="p">(</span><span class="n">FOUR</span><span class="p">,</span><span class="w"> </span><span class="s1">'GHU '</span><span class="p">,</span><span class="w"> </span><span class="n">DB_PCB</span><span class="p">,</span><span class="w"> </span><span class="n">IO_AREA</span><span class="p">,</span><span class="w"> </span><span class="n">SSA1</span><span class="p">)</span>
</pre></div>
<ul><li>In <a href="SQL" title="SQL">SQL</a> liegt sie, neben <a href="Data_Definition_Language" title="Data Definition Language">Data Definition</a> (DDL) und <a href="Data_Control_Language" title="Data Control Language">Data Control Language</a> (DCL), in Form englischer Befehlsklauseln vor. Beispiele:</li></ul>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">DELETE</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">bestellungen</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">bestellstatus</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="k">NULL</span>
<span class="k">SELECT</span><span class="w"> </span><span class="n">postleitzahl</span><span class="p">,</span><span class="w"> </span><span class="n">stadt</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">kunden</span><span class="w"> </span><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">postleitzahl</span>
</pre></div>
<p>Während in den ersten zwanzig Jahren der Datenbanktechnik die DML hauptsächlich zur Programmierung verwendet wurde, wird heute auch Wert auf die direkte Verwendung durch Benutzer gelegt. So kann z. B. die SQL-DML in den meisten Systemen auch interaktiv als <a href="Kommandozeile" title="Kommandozeile">Kommandosprache</a> verwendet werden. Auch ist heute in der Regel das Wissen über interne technische Speicherstrukturen nicht mehr notwendig, um entsprechende Verarbeitungsbefehle formulieren zu können. In diesem Fall spricht man von deskriptiven (beschreibenden) Sprachen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Sonderstellung_der_Abfrage">Sonderstellung der Abfrage</h2></div>
<p>Die Sprachelemente zur Datenabfrage (bei <a href="SQL" title="SQL">SQL</a> sind das die Schlüsselwörter <code><a href="Selektion_(Informatik)" title="Selektion (Informatik)">SELECT</a></code>, <code><a href="Relationale_Algebra#Join" title="Relationale Algebra">JOIN</a></code>, <code>WHERE</code> etc.) werden aufgrund ihrer Sonderstellung manchmal einer eigenen Kategorie <i>Data Query Language</i> (DQL, „Daten<a href="Abfragesprache" title="Abfragesprache">abfragesprache</a>“), seltener auch <i>Data Retrieval Language</i> (DRL), zugeordnet. Diese Einteilungen sind jedoch unüblich und nicht standardisiert. Die Zuordnung zur Kategorie DML lässt sich damit erklären, dass die Daten bei einer Abfrage selten in ihrer ursprünglichen Form, sondern meist „manipuliert“ (gefiltert, <a href="Sortierung" title="Sortierung">sortiert</a> etc.) ausgeliefert werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="SQL">SQL</h2></div>
<p>In der praktisch wichtigen <a href="SQL" title="SQL">Structured Query Language</a> lautet die Syntax wie folgt:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">Relation</span><span class="w"> </span><span class="p">[(</span><span class="w"> </span><span class="n">Attribut</span><span class="o">+</span><span class="w"> </span><span class="p">)]</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">Konstante</span><span class="o">+</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="o">+</span>
<span class="w"> </span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">Relation</span><span class="w"> </span><span class="p">[(</span><span class="w"> </span><span class="n">Attribut</span><span class="o">+</span><span class="w"> </span><span class="p">)]</span><span class="w"> </span><span class="n">SFW</span><span class="o">-</span><span class="n">Block</span>
<span class="w"> </span><span class="k">UPDATE</span><span class="w"> </span><span class="n">Relation</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="p">(</span><span class="n">Attribut</span><span class="o">=</span><span class="n">Ausdruck</span><span class="p">)</span><span class="o">+</span><span class="w"> </span><span class="p">[</span><span class="k">WHERE</span><span class="w"> </span><span class="k">Where</span><span class="o">-</span><span class="n">Klausel</span><span class="p">]</span>
<span class="w"> </span><span class="n">MERGE</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">Relation</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="n">Quelle</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="k">Join</span><span class="o">-</span><span class="n">Klausel</span>
<span class="w"> </span><span class="k">WHEN</span><span class="w"> </span><span class="n">MATCHED</span><span class="w"> </span><span class="k">UPDATE</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="p">(</span><span class="n">Attribut</span><span class="o">=</span><span class="n">Ausdruck</span><span class="p">)</span><span class="o">+</span>
<span class="w"> </span><span class="k">WHEN</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="n">MATCHED</span><span class="w"> </span><span class="p">[</span><span class="k">BY</span><span class="w"> </span><span class="n">TARGET</span><span class="p">]</span><span class="w"> </span><span class="k">INSERT</span><span class="w"> </span><span class="p">(</span><span class="n">Attributliste</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="n">Ausdruckliste</span><span class="p">)</span>
<span class="w"> </span><span class="p">[</span><span class="k">WHEN</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="n">MATCHED</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="k">SOURCE</span><span class="w"> </span><span class="k">DELETE</span><span class="p">]</span>
<span class="w"> </span><span class="k">DELETE</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Relation</span><span class="w"> </span><span class="p">[</span><span class="k">WHERE</span><span class="w"> </span><span class="k">Where</span><span class="o">-</span><span class="n">Klausel</span><span class="p">]</span>
<span class="w"> </span><span class="k">TRUNCATE</span><span class="w"> </span><span class="n">Relation</span>
</pre></div>
<p>Mit INSERT können explizit konstruierte Tupel oder die Ergebnisse eines
SFW-Blocks in eine Relation eingefügt werden. Dabei kann jeweils mehr
als eine Zeile verarbeitet werden.
</p>
<ul><li><i>Ausdruck</i> aus der</li></ul>
<p>UPDATE-Anweisung kann insbesondere auch auf das zu manipulierende
Attribut Bezug nehmen wie zum Beispiel in
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">UPDATE</span><span class="w"> </span><span class="n">Personal</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="n">Gehalt</span><span class="o">=</span><span class="n">Gehalt</span><span class="o">*</span><span class="mi">2</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">Abteilung</span><span class="o">=</span><span class="s1">'EDV'</span>
</pre></div>
<ul><li>Wird bei DELETE die WHERE-Klausel weggelassen, werden alle Tupel gelöscht, aber nicht das Relationsschema.</li></ul>
<p>Die TRUNCATE-Anweisung leert eine Tabelle vollständig und setzt im
Unterschied zu <code>DELETE FROM Table</code> auch jegliche
Indizes (Die dem Index zugrundeliegende Datenstruktur wird komplett geleert)
und Auto-Increment-Werte auf die Standardwerte. Zu beachten
ist, dass <code>TRUNCATE</code> bei einigen DBMS, wie zum
Beispiel MSSQL, keine Trigger auslöst.
</p><p>Beispiele:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">Student</span><span class="w"> </span><span class="p">(</span><span class="n">MatrNr</span><span class="p">,</span><span class="w"> </span><span class="n">Name</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">27123</span><span class="p">,</span><span class="w"> </span><span class="s1">'Meier'</span><span class="p">)</span>
</pre></div>
<dl><dd>Fügt eine Zeile mit den geg. Werten für die Spalten <i>MatrNr</i> und <i>Name</i> in die Tabelle <i>Student</i> hinzu.</dd></dl>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">Student</span><span class="w"> </span><span class="p">(</span><span class="n">MatrNr</span><span class="p">,</span><span class="w"> </span><span class="n">Name</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">27124</span><span class="p">,</span><span class="w"> </span><span class="s1">'Schulz'</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="mi">27125</span><span class="p">,</span><span class="w"> </span><span class="s1">'Schmidt'</span><span class="p">)</span>
</pre></div>
<dl><dd>Fügt zwei Zeilen mit den angegebenen Werten für die Spalten <i>MatrNr</i> und <i>Name</i> in die Tabelle <i>Student</i> hinzu.</dd></dl>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">Student</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">27126</span><span class="p">,</span><span class="w"> </span><span class="s1">'Schmidt'</span><span class="p">)</span>
</pre></div>
<dl><dd></dd></dl>
<p>Beim INSERT-Statement kann die erste Klammer mit den Attribut-Namen
auch weggelassen und direkt mit values() die Werte eingefügt werden.
Allerdings müssen dann die Werte in der gleichen Reihenfolge wie in der
Tabellendefinition angegeben werden. Zusätzlich müssen Werte für alle
Spalten der Tabelle bereitgestellt werden.
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">Student</span><span class="w"> </span><span class="p">(</span><span class="n">MatrNr</span><span class="p">,</span><span class="w"> </span><span class="n">Name</span><span class="p">)</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="n">MatrNr</span><span class="p">,</span><span class="w"> </span><span class="n">Name</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Student_alt</span>
</pre></div>
<dl><dd>Lädt alle Studenten aus der Tabelle <i>Student_alt</i> in die Tabelle <i>Student</i>.</dd></dl>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">UPDATE</span><span class="w"> </span><span class="n">Student</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="n">Name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'Meier'</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">MatrNr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">27124</span>
</pre></div>
<dl><dd>Ändert den Wert der Spalte Name in der Tabelle <i>Student</i> für eine bestimmte <i>MatrNr</i>.</dd></dl>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">DELETE</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Student</span>
</pre></div>
<dl><dd>Löscht alle Zeilen aus der Tabelle <i>Student</i>.</dd></dl>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">DELETE</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Student</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">MatrNr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">27124</span>
</pre></div>
<dl><dd>Löscht die Zeile mit der MatrNr 27124 aus der Tabelle <i>Student</i>.</dd></dl>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">TRUNCATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">Student</span>
</pre></div>
<dl><dd></dd></dl>
<p>Leert die Tabelle <i>Student</i> und setzt den eventuell vorhandenen
Auto-Increment-Wert auf den definierten Standard (meistens 1).
</p>
<div class="mw-heading mw-heading2"><h2 id="Andere_Sprachelemente_der_Datenbank">Andere Sprachelemente der Datenbank</h2></div>
<ul><li><a href="Data_Definition_Language" title="Data Definition Language">Data Definition Language</a></li>
<li><a href="Data_Control_Language" title="Data Control Language">Data Control Language</a></li>
<li><a href="Transaction_Control_Language" title="Transaction Control Language">Transaction Control Language</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2023-07-11" href="https://de.wikipedia.org/wiki/?title=Data_Manipulation_Language&oldid=235379756">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>